"""
函数的嵌套:
    Python允许函数的嵌套定义，即在函数内可以再定义另外一个函数。例如，在fun1()函数中嵌套定义fun2()函数
语法：
    def fun1():				#定义fun1()函数
        print('************')
        def fun2():				#嵌套定义fun2()函数
            print('Hello world!')
        fun2()				#调用fun2()函数
    fun1()					#调用fun1()函数
ps:这里需要注意的是，fun2()函数只在定义开始到fun1()函数结束范围内有效。Python还允许在一个函数中调用另外一个函数，这就是函数的嵌套调用。例如，上述代码中，在fun1()函数中嵌套调用fun2()函数。当然，函数也可以嵌套调用外部定义的另一个函数。
"""
# def fun1():  # 定义fun1()函数
#     print('************')
#     def fun2():  # 嵌套定义fun2()函数
#         print('Hello world!')
#     fun2()  # 调用fun2()函数
# fun1()  # 调用fun1()函数

# def fun3():
#     print('我是函数体3')
#
# def fun4():  # 嵌套定义fun2()函数
#     fun3()
#     print('我是函数体4')
#
# fun4()

"""
【例5-12】计算1!+2!+3!+…+10!的值并输出。
【问题分析】 使用函数的嵌套调用实现，定义fac()函数计算阶乘，以及sum()函数计算累加。执行时首先调用sum()函数，然后sum()函数中再调用fac()函数。
    todo! 符号表示阶乘（Factorial）运算符。
    阶乘的定义：n! 表示 从1 到 n所有的正整数的乘积:
    表示:
        1! = 1
        2! = 1 * 2  = 2
        3! = 1 * 2 * 3 = 6
        4! = 1 * 2 * 3 * 4 = 24
        5! = 1 * 2 * 3 * 4 * 5 = 120 
"""
def fac(k):					#定义fac()函数，计算阶乘
    i = 2
    t = 1
    while i <= k:
        t *= i
        i += 1
    return t					#返回阶乘结果

def sum(n):					#定义sum()函数，计算累加
    s = 0
    i = 1
    while i <= n:
        s = s + fac(i)				#调用fac()函数
        i += 1
    return s				             #返回累加结果

print('1!+2!+3!…10!=', sum(10))		             #调用sum()函数